<article class="" id="post-">
<header class="entry-header">
<h1 class="entry-title">.live()</h1>
<div class="entry-meta">
						所属分类：<span class="category"><a href="/category/events/">事件</a> &gt; <a href="/category/events/event-handler-attachment/">绑定事件处理器</a></span><span class="category-divider"> | </span><span class="category"><a href="/category/deprecated/">弃用</a> &gt; <a href="/category/deprecated/deprecated-1.7/">1.7 版本弃用的 API</a></span><span class="category-divider"> | </span><span class="category"><a href="/category/removed/">已删除的函数</a></span>
<span class="pull-right">英文文档：<a href="https://api.jquery123.com/live/" target="_blank">.live()</a></span>
</div><!-- .entry-meta -->
</header><!-- .entry-header -->
<!-- .entry-header -->
<div class="entry-content">
<article class="entry method" id="live1"><h2 class="section-title">
<span class="name">.live( events, handler(eventObject) )</span><span class="returns">返回: <a href="/Types/#jQuery">jQuery</a></span><span class="version-details">version deprecated: <a href="/category/version/1.7/">1.7</a>, removed: <a href="/category/version/1.9/">1.9</a></span>
</h2>
<div class="entry-wrapper">
<p class="desc"><strong>描述: </strong>附加一个事件处理器到匹配目前选择器的所有元素，现在和未来。</p>
<ul class="signatures">
<li class="signature" id="live-events-handlereventObject">
<h4 class="name">
<span class="version-details">添加的版本: <a href="/category/version/1.3/">1.3</a></span>.live( events, handler(eventObject) )</h4>
<ul>
<li>
<div><strong>events</strong></div>
<div>类型: <a href="/Types/#String">String</a>
</div>
<div>
			  一个包含一个JavaScript事件类型的字符串，比如"click"或"keydown,"或自定义事件的名称。从jQuery 1.4开始，字符串可以包含多个空格分隔的事件类型或自定义事件的名称。</div>
</li>
<li>
<div><strong>handler(eventObject)</strong></div>
<div>类型: <a href="/Types/#Function">Function</a>()</div>
<div>每当事件触发时执行的函数。</div>
</li>
</ul>
</li>
<li class="signature" id="live-events-data-handlereventObject">
<h4 class="name">
<span class="version-details">添加的版本: <a href="/category/version/1.4/">1.4</a></span>.live( events, data, handler(eventObject) )</h4>
<ul>
<li>
<div><strong>events</strong></div>
<div>类型: <a href="/Types/#String">String</a>
</div>
<div>
			  一个包含一个JavaScript事件类型的字符串，比如"click"或"keydown,"或自定义事件的名称。从jQuery 1.4开始，字符串可以包含多个空格分隔的事件类型或自定义事件的名称。</div>
</li>
<li>
<div><strong>data</strong></div>
<div>类型: <a href="/Types/#PlainObject">PlainObject</a>
</div>
<div>一个包含数据的对象将被传递到事件处理程序。</div>
</li>
<li>
<div><strong>handler(eventObject)</strong></div>
<div>类型: <a href="/Types/#Function">Function</a>()</div>
<div>每当事件触发时执行的函数。</div>
</li>
</ul>
</li>
<li class="signature" id="live-events">
<h4 class="name">
<span class="version-details">添加的版本: <a href="/category/version/1.4.3/">1.4.3</a></span>.live( events )</h4>
<ul><li>
<div><strong>events</strong></div>
<div>类型: <a href="/Types/#PlainObject">PlainObject</a>
</div>
<div>一个或多个JavaScript事件类型的一个普通的对象及其对应的执行函数组成的映射。。</div>
</li></ul>
</li>
</ul>
<div class="longdesc" id="entry-longdesc">
<p>
<strong>从jQuery1.7开始</strong>，
			 <code>.live()</code> 方法已经过时了。请使用<a href="/on"><code>.on()</code></a>附加事件处理程序。
			旧版本的jQuery中用户，应优先使用<a href="/delegate"><code>.delegate()</code></a>来取代<code>.live()</code>。</p>
<p>这个方法提供了一种手段，将委托的事件处理程序附加到一个页面的<code>document</code>元素，从而简化了在页面上动态添加的内容上事件处理的使用。直接与委派事件的讨论，请查看<a href="/on"><code>.on()</code></a>方法的更多信息。</p>
<p>在其继承者重写<code>.live()</code>方法是简单的;以下是三种事件添加方法的模板，它们是等价的：</p>
<div class="syntaxhighlighter javascript nogutter">
<table>
<tbody>
<tr>
<td class="gutter">
<div class="line n1">1</div>
<div class="line n2">2</div>
<div class="line n3">3</div>
</td>
<td class="code">
<pre><div class="container"><div class="line"><code>$(selector).live(events, data, handler);                <span class="comment">// jQuery 1.3+</span></code></div></div><div class="container"><div class="line"><code>$(document).delegate(selector, events, data, handler);  <span class="comment">// jQuery 1.4.3+</span></code></div></div><div class="container"><div class="line"><code>$(document).on(events, selector, data, handler);        <span class="comment">// jQuery 1.7+</span></code></div></div></pre>
</td>
</tr>
</tbody>
</table>
</div>
<p>
<code>events</code> 参数可以是一个空格隔开的事件类型名称的列表和可选的命名空间，或事件名称字符串和处理程序的对象。<code>data</code>参数是可选的，可以省略。例如，以下三种方法调用方式在功能上是相同的（后文还提供了更有效，性能更好的添加代理事件处理的方式）：
			
			       </p>
<div class="syntaxhighlighter javascript nogutter">
<table>
<tbody>
<tr>
<td class="gutter">
<div class="line n1">1</div>
<div class="line n2">2</div>
<div class="line n3">3</div>
</td>
<td class="code">
<pre><div class="container"><div class="line"><code>$(<span class="string">"a.offsite"</span>).live(<span class="string">"click"</span>, <span class="keyword">function</span>(){ alert(<span class="string">"Goodbye!"</span>); });                <span class="comment">// jQuery 1.3+</span></code></div></div><div class="container"><div class="line"><code>$(document).delegate(<span class="string">"a.offsite"</span>, <span class="string">"click"</span>, <span class="keyword">function</span>(){ alert(<span class="string">"Goodbye!"</span>); });  <span class="comment">// jQuery 1.4.3+</span></code></div></div><div class="container"><div class="line"><code>$(document).on(<span class="string">"click"</span>, <span class="string">"a.offsite"</span>, <span class="keyword">function</span>(){ alert(<span class="string">"Goodbye!"</span>); });        <span class="comment">// jQuery 1.7+</span></code></div></div></pre>
</td>
</tr>
</tbody>
</table>
</div>
<p>因为更高版本的jQuery提供了更好的方法，没有<code>.live()</code>方法的缺点，所以<code>.live()</code>方法不再推荐使用。特别是，使用<code>.live()</code>出现的以下问题：</p>
<ul>
<li>在调用 <code>.live()</code> 方法之前，jQuery 会先获取与指定的选择器匹配的元素，这一点对于大型文档来说是很花费时间的。
			            </li>
<li>不支持链式写法。例如，<code>$("a").find(".offsite, .external").live( ... ); </code> 这样的写法是<em>不合法</em>的，并不能像期待的那样起作用。
			            </li>
<li>由于所有的 <code>.live()</code> 事件被添加到 <code>document</code> 元素上，所以在事件被处理之前，可能会通过最长最慢的那条路径之后才能被触发。
			            </li>
<li>在移动 iOS (iPhone, iPad 和 iPod Touch) 上，对于大多数元素而言，<code>click</code> 事件不会冒泡到文档 body 上，并且如果不满足如下情况之一，就不能和 <code>.live()</code> 方法一起使用：
			               
			               <ol>
<li>使用原生的可被点击的元素，例如, <code>a</code> 或 <code>button</code>，因为这两个元素可以冒泡到 <code>document</code>。
			                  </li>
<li>在 <code>document.body</code> 内的元素使用 <code>.on()</code> 或 <code>.delegate()</code> 进行绑定，因为移动 iOS 只有在 body 内才能进行冒泡。
			                  </li>
<li>需要 click 冒泡到元素上才能应用的 CSS 样式 <code>cursor:pointer</code> (或者是父元素包含 <code>document.documentElement</code>)。但是依需注意的是，这样会禁止元素上的复制/粘贴功能，并且当点击元素时，会导致该元素被高亮显示。
			                  </li>
</ol>
</li>
<li>在事件处理中调用 <code><a href="event.stopPropagation.htm">
			                     event.stopPropagation()</a></code>
			               来阻止事件处理被添加到 document 之后的节点中，是效率很低的。因为事件已经被传播到 <code>document</code> 上。
			            </li>
<li><code>.live()</code> 方法与其它事件方法的相互影响是会令人感到惊讶的。例如，<code>$(document).unbind("click")</code> 会移除所有通过 <code>.live()</code> 添加的 click 事件!
			            </li>
</ul>
<p>对于仍在使用<code>.live()</code>的页面，那么下面关于该方法在不同版中的区别，可能会对您有一定帮助：</p>
<ul>
<li>在 jQuery 1.7 之前，如果想阻止通过 <code>.live()</code> 绑定的事件被冒泡到其它元素上，必须在事件处理中返回 <code>false</code>。调用 <code>.stopPropagation()</code> 是不起作用的。
			            </li>
<li>从 <b>jQuery 1.4</b> 开始，<code>.live()</code> 方法支持自定义事件，也支持<em>所有 JavaScript 事件冒泡</em>。它还支持一些原本不能冒泡的事件，包括 <code>change</code>, <code>submit</code>, <code>focus</code> 和 <code>blur</code>。
			            </li>
<li>在 <b>jQuery 1.3.x</b> 中，只能绑定如下 JavaScript 事件：<code>click</code>, <code>dblclick</code>, <code>keydown</code>, <code>keypress</code>, <code>keyup</code>, <code>mousedown</code>, <code>mousemove</code>, <code>mouseout</code>, <code>mouseover</code>, 和 <code>mouseup</code>.
			            </li>
</ul>
</div>
<section class="entry-examples" id="entry-examples"><header><h2 class="underline">例子:</h2></header><div class="entry-example" id="example-0">
<h4>Example: <span class="desc">点击段落时，添加另一个段落。注意，.live() 会为所有的段落(包括新生成的段落)绑定事件。</span>
</h4>
<div class="syntaxhighlighter javascript ">
<table>
<tbody>
<tr>
<td class="gutter">
<div class="line n1">1</div>
</td>
<td class="code">
<pre><div class="container"><div class="line"><code>$(<span class="string">"a"</span>).live(<span class="string">"click"</span>, <span class="keyword">function</span>() { <span class="keyword">return</span> <span class="literal">false</span>; })</code></div></div></pre>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="entry-example" id="example-1">
<h4>Example: <span class="desc">通过使用 preventDefault 方法仅取消默认的动作。</span>
</h4>
<div class="syntaxhighlighter javascript ">
<table>
<tbody>
<tr>
<td class="gutter">
<div class="line n1">1</div>
<div class="line n2">2</div>
<div class="line n3">3</div>
</td>
<td class="code">
<pre><div class="container"><div class="line"><code>$(<span class="string">"a"</span>).live(<span class="string">"click"</span>, <span class="keyword">function</span>(event){</code></div></div><div class="container"><div class="line"><code>  event.preventDefault();</code></div></div><div class="container"><div class="line"><code>});</code></div></div></pre>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="entry-example" id="example-2">
<h4>Example: <span class="desc">使用 .live() 绑定自定义事件。</span>
</h4>
<div class="syntaxhighlighter javascript ">
<table>
<tbody>
<tr>
<td class="gutter">
<div class="line n1">1</div>
<div class="line n2">2</div>
<div class="line n3">3</div>
<div class="line n4">4</div>
<div class="line n5">5</div>
<div class="line n6">6</div>
<div class="line n7">7</div>
<div class="line n8">8</div>
<div class="line n9">9</div>
</td>
<td class="code">
<pre><div class="container"><div class="line"><code>$(<span class="string">"p"</span>).live(<span class="string">"myCustomEvent"</span>, <span class="keyword">function</span>(e, myName, myValue) {</code></div></div><div class="container"><div class="line"><code>  $(<span class="keyword">this</span>).text(<span class="string">"Hi there!"</span>);</code></div></div><div class="container"><div class="line"><code>  $(<span class="string">"span"</span>).stop().css(<span class="string">"opacity"</span>, <span class="number">1</span>)</code></div></div><div class="container"><div class="line"><code>           .text(<span class="string">"myName = "</span> + myName)</code></div></div><div class="container"><div class="line"><code>           .fadeIn(<span class="number">30</span>).fadeOut(<span class="number">1000</span>);</code></div></div><div class="container"><div class="line"><code>});</code></div></div><div class="container"><div class="line"><code>$(<span class="string">"button"</span>).click(<span class="function"><span class="keyword">function</span> <span class="params">()</span> {</span></code></div></div><div class="container"><div class="line"><code>  $(<span class="string">"p"</span>).trigger(<span class="string">"myCustomEvent"</span>);</code></div></div><div class="container"><div class="line"><code>});</code></div></div></pre>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="entry-example" id="example-3">
<h4>Example: <span class="desc">使用映射绑定多个事件处理。注意，.live() 会为所有的段落(包括新生成的段落)绑定 click, mouseover, 和 mouseout 事件。</span>
</h4>
<div class="syntaxhighlighter javascript ">
<table>
<tbody>
<tr>
<td class="gutter">
<div class="line n1">1</div>
<div class="line n2">2</div>
<div class="line n3">3</div>
<div class="line n4">4</div>
<div class="line n5">5</div>
<div class="line n6">6</div>
<div class="line n7">7</div>
<div class="line n8">8</div>
<div class="line n9">9</div>
<div class="line n10">10</div>
<div class="line n11">11</div>
</td>
<td class="code">
<pre><div class="container"><div class="line"><code>$(<span class="string">"p"</span>).live({</code></div></div><div class="container"><div class="line"><code>  click: <span class="keyword">function</span>() {</code></div></div><div class="container"><div class="line"><code>    $(<span class="keyword">this</span>).after(<span class="string">"&lt;p&gt;Another paragraph!&lt;/p&gt;"</span>);</code></div></div><div class="container"><div class="line"><code>  },</code></div></div><div class="container"><div class="line"><code>  mouseover: <span class="keyword">function</span>() {</code></div></div><div class="container"><div class="line"><code>    $(<span class="keyword">this</span>).addClass(<span class="string">"over"</span>);</code></div></div><div class="container"><div class="line"><code>  },</code></div></div><div class="container"><div class="line"><code>  mouseout: <span class="keyword">function</span>() {</code></div></div><div class="container"><div class="line"><code>    $(<span class="keyword">this</span>).removeClass(<span class="string">"over"</span>);</code></div></div><div class="container"><div class="line"><code>  }</code></div></div><div class="container"><div class="line"><code>});</code></div></div></pre>
</td>
</tr>
</tbody>
</table>
</div>
</div></section>
</div></article> </div>
</article>